package com.example.math;

import org.junit.jupiter.api.Test;

import java.util.Random;

/**
 * @Author 郅占伟
 * @ClassName TestMath
 * @Description Math类中全部为静态方法，因此不需要实例化，直接调用即可。
 * @Date 2024年10月21日
 * @Version: 1.0
 */
public class TestMath {

    /**
     * 数学常量
     */
    @Test
    public void testConstant() {
        System.out.println("PI：" + Math.PI);
        System.out.println("E：" + Math.E);
    }

    /**
     * @description 绝对值函数
     */
    @Test
    public void testAbs() {
        /*
        以int类型为例，取值范围是[-2147483648, 2147483647]
        如果没有正数与负数对应，则返回错误，建议使用absExact()方法，jdk15引入
         */
        System.out.println(Math.abs(-10));
    }

    /**
     * @description 向一维数轴的正方向取距离最近的整数
     */
    @Test
    public void testCeil() {
        System.out.println(Math.ceil(3.5));     // 4.0

        System.out.println(Math.ceil(-3.5));    // -3.0
    }

    /**
     * @description 向一维数轴的负方向取距离最近的整数
     */
    @Test
    public void testFloor() {
        System.out.println(Math.floor(3.5));    // 3.0

        System.out.println(Math.floor(-3.5));   // -4.0
    }

    /**
     * @description 四舍五入
     */
    @Test
    public void testRound() {
        System.out.println(Math.round(12.34));  // 12
        System.out.println(Math.round(12.54));  // 13
        System.out.println(Math.round(-12.34)); // -12
        System.out.println(Math.round(-12.54)); // -13
    }

    /**
     * @description 最大值
     */
    @Test
    public void testMax() {
        System.out.println(Math.max(3, 5));     // 5
        System.out.println(Math.max(5, 3));     // 5
        System.out.println(Math.max(-3, -5));   // -3
    }

    /**
     * @description 最小值
     */
    @Test
    public void testMin() {
        System.out.println(Math.min(3, 5));     // 3
        System.out.println(Math.min(5, 3));     // 3
        System.out.println(Math.min(-3, -5));   // -5
    }

    /**
     * @description 幂次方
     */
    @Test
    public void testPow() {
        System.out.println(Math.pow(2, 3));    // 8.0
    }

    /**
     * @description
     */
    @Test
    public void testRandom() {
        System.out.println(Math.random());  // [0.0,1.0)之间的随机数
        for (int i = 0; i < 100; i++) {
            int m = new Random().nextInt(10 - 5 + 1) + 5;  // [0,10)之间的随机数
            System.out.print(m + " ");
        }

    }

    @Test
    public static void testPrime() {
//判断一个数是否为一个质数
        System.out.println(isPrime(13));
        System.out.println(isPrime(10));

    }

    public static boolean isPrime(int number) {
        for (int i = 2; i <= Math.sqrt(number); i++)
            if (number % i == 0) {
                return false;
            }
        return true;
    }
}
